【Bun】Bun 1.0を軽く素振りしてみる(バンドラー編)
https://1.bp.blogspot.com/-abtG2HYMsA8/UU--5kLFD0I/AAAAAAAAO_w/ta20nlofB6Y/s1600/kaizoku_takara.png
【前提】
Bunをバンドラーとして素振りしてみます。
【バンドラーとしての特徴】
.js .cjs .mjs .mts .cts .ts .tsx .jsx .toml .json .txt .wasm .node
の拡張子をデフォルトでサポートしています。バンドルはBun.build()APIを活用して、JavaScriptもしくはTypeScriptのコードから実行することもできますし、$ bun buildによるcliで直接実行することも可能です。 試しにHTTP Serverのコードをバンドルしてみます。
code:server.ts
import figlet from 'figlet'
const body = figlet.textSync('tabun')
const serve = Bun.serve({
port: 3000,
fetch(req) {
return new Response('tabun!')
}
})
console.log(body)
console.log(Check it http://localhost:${serve.port} 🥟)
code:bundle.ts
await Bun.build({
target: 'bun',
outdir: './dist'
})
$ bun bundle.tsにより、バンドルすることができます。Bunはランタイムでもあるのでサーバーサイドのコードをバンドルしなくても実行は可能ですが、バンドルすることでBunの起動時間短縮にはなります。ターゲットをbunに指定した場合、生成したコード内に// @bunディレクティブを記載することで実行時にトランスパイルの必要性がないことをBunのランタイムに示します。
さて、バンドルしたコードを実行してみましょう
code:test.sh
bun ./dist/index.js
_ _
| |_ __ _| |__ _ _ _ __
| __/ _` | '_ \| | | | '_ \
| || (_| | |_) | |_| | | | |
\__\__,_|_.__/ \__,_|_| |_|
問題なく実行できますね。
【余談】
プラグイン機能もあるので独自のローダーを追加できたり、マクロの指定により、バンドルにJavaScriptのコードをインライン化することなどもできます。次はテストランナーとしてのBunを検証していきます。